package  com.ahuan.config;

import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;
import org.springframework.core.env.Environment;
import org.springframework.core.env.Profiles;
import springfox.documentation.builders.PathSelectors;
import springfox.documentation.builders.RequestHandlerSelectors;
import springfox.documentation.oas.annotations.EnableOpenApi;
import springfox.documentation.service.ApiInfo;
import springfox.documentation.spi.DocumentationType;
import springfox.documentation.spring.web.plugins.Docket;

@Configuration// 标记该类为配置类（component）
@EnableOpenApi
public class SwaggerConfig {
    // 创建一个Docket Bean，这个Bean实际上是一个Docket实例，它负责生成Swagger的API文档
    @Bean
    public Docket docket(Environment environment){
        // 设置要显示的Swagger的环境
        Profiles profiles = Profiles.of("dev","test","pro");

        // 判断当前是否处于dev或test环境
        boolean flag = environment.acceptsProfiles(profiles);


        return new Docket(DocumentationType.SWAGGER_2)
                .apiInfo(ApiInfo.DEFAULT)
                //是否启用Swagger,默认true
                .enable(flag)
                .select()
                //RequestHandlerSelectors，这个类用于选择哪些Controller的API要暴露出来
                //basePackage：指定包名
                //any：扫描所有
                //none：不扫描
                //withMethodAnnotation：扫描所有标记了@Annotation的方法，传入注解的class对象
                //withClassAnnotation：扫描所有标记了@Annotation的类，传入类的class对象
                .apis(RequestHandlerSelectors.basePackage("com.ahuan.controller"))
                //path过滤路径
                .paths(PathSelectors.ant("/**"))//注意不同于DispatcherServlet，不能单写/，要加**
                .build();//工厂模式
    }

//定制apiInfo
//    private ApiInfo apiInfo() {
//        // 创建一个ApiInfo实例，并设置相关信息
//        Contact contact = new Contact("My Name", "http://www.alibaba.com", "my@email.com");
//        return new ApiInfo(
//                "Api Documentation",
//                "Api Documentation",
//                "1.0",
//                "urn:tos",
//                contact,
//                "Apache 2.0",
//                "http://www.apache.org/licenses/LICENSE-2.0",
//                new ArrayList());
//    }
}
